//
//  main.c
//  二维数组
//
//  Created by ws on 2017/7/20.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>

/**
 二维数组:元素为一维数组的数组
 
 二维数组格式: 数据类型 数组名称 [一维数组的个数] [一维数组的元素个数]
 初始化:变量的第一次赋值我们称为初始化
 
 注意点:
 1.如果二维数组仅仅定义,没有初始化,里面的元都是垃圾值(就是不确定的值)
 2.使用二维数组进行定义的同时进行初始化,那么没有显式初始化的元素会被初始化为0
 3.定义二维数组的时候必须要指定一维数组的元素个数(int a[2][] = {1, 2, 3, 4, 5, 6}; 错误写法)

 */
/**
 二维数组的基本概念(基本使用)
 */
void test(){
    //定义一个二维数组
    char scores[2][2];
    //分别对每个元素进行初始化
    scores[0][0] = 1;
    scores[0][1] = 2;
    scores[1][0] = 4;
    scores[1][1] = 5;
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }

}

/**
 二维数组的多种初始化方式
 
 */
void test1(){
    //1.先定义二维数组,然后再初始化
    char scores[2][2];
    //分别对每个元素进行初始化
    scores[0][0] = 1;
    scores[0][1] = 2;
    scores[1][0] = 4;
    scores[1][1] = 5;
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
 /****************************************************************************/
    //2.定义二维数组的同时进行初始化
    //2.1.指定一维数组的个数同时对数组中的全部的元素进行初始化
    int scores1[2][2] = {{1,1},{100,100}};
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores1[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
    /***************************************************************/
    //2.2不指定一维数组的个数同时对数组中的全部的元素进行初始化
    int scores3[][2] = {{1,50},{100,80}};
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores3[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
    /***************************************************************/
    //2.3不指定一维数组的个数同时对数组中的元素部分进行初始化(对一维数组元素部分初始化),没有初始化的元素的值一定是0
    int scores4[][2] = {{1},{100}};
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores4[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
  /***************************************************************/
    
    //2.4指定一维数组的个数,全部元素初始化
    int scores5[2][2] = {1,2,3,4};
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores5[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
    /***************************************************************/
    //2.4指定一维数组的个数,部分元素初始化,没有初始化的元素的值一定是0
    int scores6[2][2] = {1,2,3};
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores6[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
    /***************************************************************/
    //2.4不指定一维数组的个数,指定每个一维数组元素的个数,部分元素初始化
    int scores7[][2] = {1,2,3};
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores7[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
    /***************************************************************/
}
int main(int argc, const char * argv[]) {
    
    //2.4不指定一维数组的个数,指定每个一维数组元素的个数,部分元素初始化
    int scores7[][2] = {1,2,3};
    //遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("scores[%d][%d] = %d\n",i,j,scores7[i][j]);
        }
        printf("第%d个一维数组\n",i);
    }
    /***************************************************************/
    return 0;
}
